/**
 * 																设备操作流程图
 * 	 ———N————获取设备Token
 *	|			|Y
 * 	|———N——查询设备状态和类型										  设备登录———————————————————Y————————————————————————————————————————————
 * 	|			|Y													 |N					 	|											|
 * 	|———N———判断是否在线				  	获取设备配置—————————————判断是否登录—————Y————设备保活（20s）							设备操作（获取配置/云台等）
 * 	|			|Y                    		  |																							|
 * 	|		判断是否低功耗设备————N—————分情况进行设备操作——————————获取播放地址————————判断是否成功获取——————N——————提示错误信息				|
 *  |			|Y					  		  |											    |Y						|					|
 *  |		判断是否已唤醒—————————Y———————————											播放视频						|					|
 *  |			|N					  		  |												|						|					|
 *  |		 去唤醒设备————————————Y———————————												|						|					|
 *  |			|N																			|						|					|
 * 	 ————————— 结束	————————————————————————————————————————————————————————————————————————————————————————————————————————————————————|
 */
const {
	xm_uuid,
	xm_appKey,
	xm_appMiYao,
	xm_movedCard,
} = require('@/app.config.js');
import Api from 'api.js'
const api = new Api(xm_uuid, xm_appKey, xm_appMiYao, xm_movedCard)

/**
 * @description  获取设备token
 * @param {array} sns 设备序列号集合
 */
export const getDeviceToken = (sns, deviceList) => {
	const data = {
		sns: sns
	};
	api.getDeviceToken(data, (result) => {

		deviceList.forEach((item) => {
			result.forEach((pro) => {
				if (item.deviceNo === pro.sn) {
					item.token = pro.token;
				}
			});
		});
		let tokenList = [];
		result.forEach((item) => {
			tokenList.push(item.token);
		});
		getDeviceStatus(tokenList, deviceList);
		return tokenList
	});
}
/**
 * @description 获取设备状态
 * @param {Array} tokenList token集合
 * @param {Array} deviceList 设备集合
 */
export const getDeviceStatus = (tokenList, deviceList) => {
		const data = {
			token: tokenList
		};
		api.getDeviceStatus(data, (result) => {
			deviceList.forEach((item) => {
				result.forEach((pro) => {
					if (item.deviceNo === pro.uuid) {
						this.$set(item, 'status', pro)
					}
				});
			});
			isDeviceOnline(deviceList)
			return deviceList
		});
	}

	/**
	 * @description 判断设备是否在线
	 * @param {Array} deviceList 设备对象的集合
	 */
	export const isDeviceOnline = (deviceList) => {
		deviceList.forEach(item => {
			if (item.status.status === 'online') {
				isDeviceWakeUpEnable(item)
			}
		})
	}

/**
 * @description 判断设备是否支持远程唤醒
 * @param {Object} 设备对象
 */
export const isDeviceWakeUpEnable = (device) => {
	// 低功耗设备-已休眠
	if (device.status.wakeUpStatus === 0) {
		// 支持远程唤醒
		if (device.status.wakeUpEnable === '1') {
			//唤醒设备
			uni.showLoading({
				title: '唤醒设备中...'
			});
			let data = {
				sn: device.deviceNo,
				hostedControl: "1", //是否唤醒主控（空值或0：不唤醒主控；1：唤醒主控）
			}
			wakeup(data, device.token, () => {
				uni.hideLoading({
					success: (res) => {
						loginOrAuto();
					}
				});
			});
		}
		// 不支持远程唤醒（手动唤醒）
		else {
			uni.showModal({
				title: '提示',
				content: '该设备深度休眠中，需要手动唤醒！',
				showCancel: false,
				success: (res) => {
					uni.navigateBack({
						delta: 1
					});
				}
			});
		}
	}
	// 低功耗设备-已唤醒
	else if (device.status.wakeUpStatus === 1) {
		loginOrAuto();
	}
	// 普通设备
	else {
		loginOrAuto();
	}
}

/**
 * @description 唤醒低功耗设备
 * @param {type} FN_PARAMS 
 */
export const wakeup = (token, callback) => {
	api.wakeup(data, token, (result) => {
		if (typeof callback === 'function') {
			callback();
		}
	});
}

/**
 * @description 登录或自动登录
 * @param {Boolen} isCache 是否存在缓存  
 */
export const loginOrAuto = () => {
	if (!this.isCache) {
		// 弹出窗口登录
	} else {
		// 自动登录
	}
}